PrintStuff àÛç¸ÉãÅ[Év

void PrintStuff ()
{
  GrafPtr      oldPort;
  short        copies,
               firstPage,
               lastPage,
               numberOfCopies,
               printmgrsResFile,
               realNumberOfPagesinDoc,
               pageNumber,
               PrintError;
  THPrint      thePrRecHdl;
  TPPrPort     thePrPort;
  TPrStatus    theStatus;

  GetPort(&oldPort);

thePrRecHdl = (THPrint)  NewHandle (sizeof (TPrint));

 /**
     Memory Manager Ç™ÉvÉäÉìÉgÉåÉRÅ[ÉhÉnÉìÉhÉãÇäÑÇËìñǃÇΩÇΔÇ´Ç…
     ÉGÉâÅ[ÇãNDZǵǃǢǻǢDZÇΔÅAÇ≥ÇÁÇ… Memory Manager Ç™ nil ÉnÉì
     ÉhÉãÇìnǵǃǢǻǢDZÇΔÇämîFÇ∑ÇÈ
 **/

  if (thePrRecHdl != NULL && MemError() == noErr)
    {
      PrOpen();

      if (PrError() == noErr)
        {
         /**
          åªç›ÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉã (ǬNjÇËÅAÉvÉäÉìÉ^ÉhÉâÉCÉoÇÃ) Çï€ë∂ǵǃÅA
          pIdleProc Ç©ÇÁêßå‰Ç™ñflÇ≥ÇÍÇΩÇΔÇ´Ç…ÉhÉâÉCÉoÇÃÉäÉ\Å[ÉXÇ™é∏ÇÌÇÍǻǢÇÊǧDžÇ∑ÇÈ
          **/
          printmgrsResFile = CurResFile();
          PrintDefault(thePrRecHdl);

          if (PrError() == noErr)
            {
              if (PrJobDialog(thePrRecHdl))
                {
                 /**
                    DetermineNumberOfPagesinDoc Ç≈ÇÕÅAèëófiÇÃÉTÉCÉYÇΔ 
                    TPrInfo ÉåÉRÅ[ÉhÇà rPage Çî‰ärǵǃÅAèëófiÇ…ä‹Ç‹ÇÍÇÈ
                    ÉyÅ[ÉWêîÇåàíËÇ∑ÇÈ (Inside Macintosh: Imaging With 
                    QuickDraw p.9-46)ÅBåªç›ëIëǵǃǢÇÈÉvÉäÉìÉ^Ç≈èëófiÇ
                    àÛç¸Ç∑ÇÈÇΩÇflÇ…ïKóvÇ»ÉyÅ[ÉWêîÇ™ï‘Ç≥ÇÍÇÈ
                  **/

                  realNumberOfPagesinDoc = DetermineNumberOfPagesinDoc
                                             ((**thePrRecHdl).prInfo.rPage);

                  if (PrJobDialog(thePrRecHdl)) 
                    {
                     /**
                            TPrJob ÉåÉRÅ[ÉhÇà iCopies Ç©ÇÁÅAÉÜÅ[ÉUÇ™éwíËǵÇΩ
                            èëófiÇÃïîêîÇéÊìæÇ∑ÇÈ (Inside Macintosh: Imaging 
                            With QuickDraw p.9-47)
                      **/

                      numberOfCopies = (**thePrRecHdl).prJob.iCopies;

                       /**
                           TPrJob ÉåÉRÅ[ÉhÇà FstPage ÇΔ iLastPage Ç©ÇÁÅA
                           ÉÜÅ[ÉUÇ™àÛç¸ÇéwíËǵÇΩèëófiÇÃêÊì™ÉyÅ[ÉWÇΔ
                           ññîˆÉyÅ[ÉWÇéÊìæÇ∑ÇÈ (Inside Macintosh: Imaging 
                           With QuickDraw p.9-47)
                        **/

                      firstPage = (**thePrRecHdl).prJob.iFstPage;
                      lastPage = (**thePrRecHdl).prJob.iLstPage;

                       /**
                           àÛç¸ÉãÅ[ÉvÇ≈ "Ç∑Ç◊ǃ" ÇÃÉyÅ[ÉWÇàÛç¸Ç∑ÇÈ
                        **/

                      (**thePrRecHdl).prJob.iFstPage = 1;
                      (**thePrRecHdl).prJob.iLstPage = 9999;

                       /**
                           èëófiÇ…ä‹Ç‹ÇÍǃǢÇÈ "åªé¿" ÇÃÉyÅ[ÉWêîÇåàíËÇ∑ÇÈÅB
                           DZÇÃÉeÉXÉgÇçsÇÌǻǢÇΔÅA9999 ÉyÅ[ÉWÇàÛç¸Ç∑ÇÈDZÇΔ
                           DžǻǡǃǵNjǧ
                        **/

                      if (realNumberOfPagesinDoc < lastPage) 
                        lastPage = realNumberOfPagesinDoc;

                      PrintingStatusDialog = GetNewDialog(rPrintingDialogID, nil, (WindowPtr) -1);

                       /**
                           "Print Job" É_ÉCÉAÉçÉOÇ≈ÉÜÅ[ÉUÇ™éwíËǵÇΩèëófiÇÃïîêîÇ
                           àÛç¸Ç∑ÇÈ
                        **/
                      for (copies = 1; copies <= numberOfCopies; copies++)
                        {
                         /**
                        MyPrint ÉåÉRÅ[ÉhÇà pIdleProc Ç÷ÇÃÉ|ÉCÉìÉ^Ç
                        ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ
                          **/
                          (**thePrRecHdl).prJob.pIdleProc = checkMyPrintDialogButton();
                         /**
                             ÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÉvÉäÉìÉ^ÉhÉâÉCÉoÇ…ÉäÉXÉgÉAÇ∑ÇÈ
                          **/

                          UseResFile(printmgrsResFile);
                          thePrPort = PrOpenDoc(thePrRecHdl, nil, nil);

                          if (PrError() == noErr)
                            {

                             /**
                                 "Print Job" É_ÉCÉAÉçÉOÇ≈ÉÜÅ[ÉUÇ™éwíËǵÇΩèëófiÇÃ
                                 ÉyÅ[ÉWîÕàÕÇàÛç¸Ç∑ÇÈ
                              **/
                              pageNumber = firstPage;
                              while (pageNumber <= lastPage && PrError() == noErr)
                                {
                                  
                     /**
                       128 ÉyÅ[ÉWÇÃã´äEÇâzǶÇΩèÍçáÇÕÅA
                       åªç›ÇÃÉvÉäÉìÉgÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYǵ
                       ïKóvÇ»èÍçáÇÕǪÇÍÇÉvÉäÉìÉ^Ç…ëóêMǵǃǩÇÁÅA
                       êVǵǢèëófiÇÉIÅ[ÉvÉìÇ∑ÇÈ
                     **/
                     
                     if ((pageNumber - firstPage) % iPFMaxPgs == 0)
                       {
                         if (pageNumber != firstPage)
                           {
                             PrCloseDoc(thePrPort);
                             if (((**thePrRecHdl).prJob.bJDocLoop ==
                                             bSpoolLoop) && (PrError() == noErr))
                                             PrPicFile(thePrRecHdl, nil, nil, nil,
                                                       &theStatus);
                             thePrPort = PrOpenDoc(thePrRecHdl, nil,
                                                                nil);
                                         }
                                     }  

                     PrOpenPage(thePrPort, nil);

                                  if (PrError() == noErr) 
                                    {
                                     /**
                                        rPage (Inside Macintosh: Imaging With
                                        QuickDraw p.9-46) ÇÕÅAåªç›ëIëǵǃǢÇÈ
                                        ÉvÉäÉìÉ^ÇÃàÛç¸â¬î\óÃàÊÇï\Ç∑ÅBåªç›ÇÃÉ|Å[ÉgÇ
                                        ï`âÊÉãÅ[É`ÉìÇ…ìnÇ∑DZÇΔÇ≈ÅAÉAÉvÉäÉPÅ[
                                        ÉVÉáÉìÇ™ìØÇ∂ÉãÅ[É`ÉìÇégǡǃÉXÉNÉäÅ[Éì
                                        ÇΔÉvÉäÉìÉ^Çà GrafPort Çï`âÊÇ≈Ç´ÇÈÇÊǧDž
                                        Ç»ÇÈ
                                      **/
                                      DrawStuff ((**thePrRecHdl).prInfo.rPage, 
                                           (GrafPtr) thePrPort, pageNumber);
                                    }

                                  PrClosePage(thePrPort);
                                  pageNumber++;
                                }  /**  pageNumber ÉãÅ[ÉvÇÃèIÇÌÇË  **/
                            }
                          PrCloseDoc(thePrPort);
                        } /**  ïîêîÉãÅ[ÉvÇÃèIÇÌÇË  **/
                    }
                   /**
                       àÛç¸ÉWÉáÉuÇÕÅA"Print Style" Ç‹ÇΩÇÕ "Print Job" É_ÉCÉAÉçÉO
                       Ç≈ÉÜÅ[ÉUÇ…ÇÊǡǃÉLÉÉÉìÉZÉãÇ≥ÇÍǃǢÇÈÅBPrError Ç™ PrAbort 
                       Ç…ÉZÉbÉgÇ≥ÇÍÅAPrint Manager Ç…åªç›ÇÃàÛç¸ÉWÉáÉuÇ™íÜé~Ç≥ÇÍÇΩ
                       DZÇΔÇ™í ímÇ≥ÇÍÇÈ
                    **/
                  else
                    PrSetError (iPrAbort);   /**  "Job" É_ÉCÉAÉçÉOÇ©ÇÁÇÃÉLÉÉÉìÉZÉã  **/
                }
              else
                PrSetError (iPrAbort);   /**  "Style" É_ÉCÉAÉçÉOÇ©ÇÁÇÃÉLÉÉÉìÉZÉã  **/ 
            }
        }

      if (((**thePrRecHdl).prJob.bJDocLoop == bSpoolLoop) && (PrError() == noErr))
        PrPicFile(thePrRecHdl, nil, nil, nil, &theStatus);

       /**
            àÛç¸ÉGÉâÅ[Çâ°éÊÇËÇ∑ÇÈ -- Printing Manager Ç
            ÉNÉçÅ[ÉYÇ∑ÇÈÇΔÅAPrError ÇÕóLå¯Ç»åãâ Çï‘Ç≥Ç»Ç≠Ç»ÇÈ
       **/

      PrintError = PrError();

      PrClose();

       /**
           àÛç¸ÉãÅ[ÉvÇ™é∏îsÇ…èIÇÌÇÈÇ‹Ç≈ÅAàÛç¸ÉGÉâÅ[ÇÃÉåÉ|Å[ÉgÇÕçsÇÌǻǢÅB
           DZÇÍÇ…ÇÊÇËÅAPrint Manager ÇÃÇ∑Ç◊ǃÇÃÉIÅ[ÉvÉìåƒÇ—èoǵǙ
           ëŒâûÇ∑ÇÈÉNÉçÅ[ÉYåƒÇ—èoǵÇéùǬDZÇΔÇ…Ç»ÇËÅAǪÇÃåãâ ÅAPrint 
           Manager ÇìKêÿÇ…ÉNÉçÅ[ÉYǵǃÅAÇ∑Ç◊ǃÇÃàÍéûìIÇ»ÉÅÉÇÉääÑÇËìñǃÇ
           âï˙Ç∑ÇÈDZÇΔÇ™â¬î\Ç…Ç»ÇÈ
        **/
      if (PrintError != noErr) 
        PostPrintingErrors (PrintError);
    }

  if (thePrRecHdl != NULL)
    DisposeHandle((Handle) thePrRecHdl);

  if (PrintingStatusDialog != NULL)
    DisposeDialog(PrintingStatusDialog);

  SetPort(oldPort);
}  /** PrintStuff **/